#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>

std::mutex mtx;
std::condition_variable cv;
bool printA = true; // 用于控制打印 A 和 B

void printAFunction() 
{
    for (int i = 0; i < 10; ++i) 
    {
        std::unique_lock<std::mutex> lock(mtx);
        cv.wait(lock, []{ return printA; }); // 等待条件为 true
        
        std::cout << "A";
        printA = false; // 切换到打印 B
        
        cv.notify_all(); // 通知其他线程
    }
}

void printBFunction() 
{
    for (int i = 0; i < 10; ++i) 
    {
        std::unique_lock<std::mutex> lock(mtx);
        cv.wait(lock, []{ return !printA; }); // 等待条件为 false
        
        std::cout << "B";
        printA = true; // 切换到打印 A
        
        cv.notify_all(); // 通知其他线程
    }
}

int main() 
{
    std::thread threadA(printAFunction);
    std::thread threadB(printBFunction);

    threadA.join();
    threadB.join();

    return 0;
}